#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
快速测试管理员账号登录
"""

import os
import sys
import django

# 设置Django环境
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TradingPlatform_Server.settings')
django.setup()

from Server.models import User
from Server.sms_service import SMSService, send_login_code, verify_login_code

def test_admin_login():
    """测试管理员账号"""
    admin_phone = '13800138000'
    admin_password = 'admin123'
    
    print("\n" + "="*70)
    print("管理员账号登录测试")
    print("="*70)
    
    # 1. 检查账号是否存在
    print("\n[1] 检查账号...")
    user = User.objects.filter(phone=admin_phone).first()
    if user:
        print("    [OK] 账号存在")
        print("    - ID: %s" % user.id)
        print("    - 昵称: %s" % user.username)
        print("    - 手机号: %s" % user.phone)
        print("    - 密码(数据库): %s" % user.password)
        print("    - 是否管理员: %s" % user.is_admin)
    else:
        print("    [ERROR] 账号不存在！")
        return
    
    # 2. 测试密码登录
    print("\n[2] 测试密码登录...")
    pwd_user = User.objects.filter(phone=admin_phone, password=admin_password).first()
    if pwd_user:
        print("    [OK] 密码登录成功！")
        print("    => 请使用密码登录：")
        print("       手机号: %s" % admin_phone)
        print("       密码: %s" % admin_password)
    else:
        print("    [ERROR] 密码登录失败！")
        print("    => 数据库中的密码: %s" % user.password)
        print("    => 您尝试的密码: %s" % admin_password)
        print("    => 密码不匹配！")
    
    # 3. 测试验证码功能
    print("\n[3] 测试验证码功能...")
    
    # 3.1 发送验证码
    print("    [3.1] 发送验证码...")
    success, message, code = send_login_code(admin_phone)
    if success:
        print("    [OK] 验证码生成成功: %s" % code)
    else:
        print("    [ERROR] 验证码生成失败: %s" % message)
        return
    
    # 3.2 检查缓存
    print("\n    [3.2] 检查缓存...")
    cached = SMSService.get_code_for_debug(admin_phone, 'login')
    print("    - 缓存中的验证码: %s" % cached)
    print("    - 生成的验证码: %s" % code)
    print("    - 是否匹配: %s" % (str(cached) == str(code)))
    
    # 3.3 验证正确的验证码
    print("\n    [3.3] 验证正确的验证码...")
    ok1, msg1 = verify_login_code(admin_phone, code)
    print("    - 结果: %s" % ("成功" if ok1 else "失败"))
    print("    - 消息: %s" % msg1)
    
    # 3.4 再次验证（应该失败）
    print("\n    [3.4] 再次验证（应该失败，因为已被删除）...")
    ok2, msg2 = verify_login_code(admin_phone, code)
    print("    - 结果: %s" % ("成功" if ok2 else "失败"))
    print("    - 消息: %s" % msg2)
    
    # 3.5 发送新验证码
    print("\n    [3.5] 发送新验证码...")
    success3, message3, code3 = send_login_code(admin_phone)
    if success3:
        print("    [OK] 新验证码: %s" % code3)
        
        # 测试错误验证码
        print("\n    [3.6] 测试错误验证码...")
        wrong_code = "000000"
        ok3, msg3 = verify_login_code(admin_phone, wrong_code)
        print("    - 使用错误验证码 '%s'" % wrong_code)
        print("    - 结果: %s" % ("成功" if ok3 else "失败"))
        print("    - 消息: %s" % msg3)
    
    # 总结
    print("\n" + "="*70)
    print("测试总结")
    print("="*70)
    
    if pwd_user:
        print("\n[推荐] 使用密码登录：")
        print("  手机号: %s" % admin_phone)
        print("  密码: %s" % admin_password)
    else:
        print("\n[警告] 密码登录不可用，请检查数据库！")
    
    if success3:
        print("\n[备用] 使用验证码登录：")
        print("  手机号: %s" % admin_phone)
        print("  验证码: %s (有效期5分钟)" % code3)
    
    print("\n" + "="*70 + "\n")

if __name__ == '__main__':
    try:
        test_admin_login()
    except Exception as e:
        print("\n[错误] %s" % str(e))
        import traceback
        traceback.print_exc()

